home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume24 / gnucalc / part42 < prev    next >
Encoding:
Text File  |  1991-11-01  |  55.5 KB  |  1,344 lines

  1. Newsgroups: comp.sources.misc
  2. From: daveg@synaptics.com (David Gillespie)
  3. Subject:  v24i090:  gnucalc - GNU Emacs Calculator, v2.00, Part42/56
  4. Message-ID: <1991Nov1.183709.20885@sparky.imd.sterling.com>
  5. X-Md4-Signature: 89017c936cce42a4c6e60716bbf12c30
  6. Date: Fri, 1 Nov 1991 18:37:09 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: daveg@synaptics.com (David Gillespie)
  10. Posting-number: Volume 24, Issue 90
  11. Archive-name: gnucalc/part42
  12. Environment: Emacs
  13. Supersedes: gmcalc: Volume 13, Issue 27-45
  14.  
  15. ---- Cut Here and unpack ----
  16. #!/bin/sh
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file calc.texinfo continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 42; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test ! -f _shar_wnt_.tmp; then
  33.     echo 'x - still skipping calc.texinfo'
  34. else
  35. echo 'x - continuing file calc.texinfo'
  36. sed 's/^X//' << 'SHAR_EOF' >> 'calc.texinfo' &&
  37. lump-sum argument to these functions, but the computation will be
  38. rather slow in the four-argument case.@refill
  39. X
  40. @kindex H b #
  41. @tindex nperl
  42. The @kbd{H b #} [@code{nperl}] command does the same computation
  43. using @code{pvl}.  By exchanging @var{payment} and @var{amount} you
  44. can also get the solution for @code{fvl}.  For example,
  45. @code{nperl(8%, 2000, 1000) = 9.006}, so if you place $1000 in a
  46. bank account earning 8%, it will take nine years to grow to $2000.@refill
  47. X
  48. @kindex b T
  49. @pindex calc-fin-rate
  50. @tindex rate
  51. The @kbd{b T} (@code{calc-fin-rate}) [@code{rate}] command computes
  52. the rate of return on an investment.  This is also an inverse of @code{pv}:
  53. @code{rate(@var{n}, @var{payment}, @var{amount})} computes the value of
  54. @var{rate} such that @code{pv(@var{rate}, @var{n}, @var{payment}) =
  55. @var{amount}}.@refill
  56. X
  57. @kindex I b T
  58. @tindex H b T
  59. @tindex rateb
  60. @tindex ratel
  61. The @kbd{I b T} [@code{rateb}] and @kbd{H b T} [@code{ratel}]
  62. commands solve the analogous equations with @code{pvb} or @code{pvl}
  63. in place of @code{pv}.  Also, @code{rate} and @code{rateb} can
  64. accept an optional fourth argument just like @code{pv} and @code{pvb}.
  65. To redo the above example from a different perspective,
  66. @code{ratel(9, 2000, 1000) = .08}, which says you will need an
  67. interest rate of 8% in order to double your account in nine years.@refill
  68. X
  69. @kindex b I
  70. @pindex calc-fin-irr
  71. @tindex irr
  72. The @kbd{b I} (@code{calc-fin-irr}) [@code{irr}] command is the
  73. analogous function to @code{rate} but for net present value.
  74. Its argument is a vector of payments.  Thus @code{irr(@var{payments})}
  75. computes the @var{rate} such that @code{npv(@var{rate}, @var{payments}) = 0};
  76. this rate is known as the @dfn{internal rate of return}.
  77. X
  78. @kindex I b I
  79. @tindex irrb
  80. The @kbd{I b I} [@code{irrb}] command computes the internal rate of
  81. return assuming payments occur at the beginning of each period.
  82. X
  83. @node Depreciation Functions, Definitions of Financial Functions, Related Financial Functions, Financial Functions
  84. @subsection Depreciation Functions
  85. X
  86. @noindent
  87. The functions in this section calculate @dfn{depreciation}, which is
  88. the amount of value that a possession loses over time.  These functions
  89. are characterized by three parameters:  @var{cost}, the original cost
  90. of the asset; @var{salvage}, the value the asset will have at the end
  91. of its expected ``useful life''; and @var{life}, the number of years
  92. (or other periods) of the expected useful life.
  93. X
  94. There are several methods for calculating depreciation that differ in
  95. the way they spread the depreciation over the lifetime of the asset.
  96. X
  97. @kindex b S
  98. @pindex calc-fin-sln
  99. @tindex sln
  100. The @kbd{b S} (@code{calc-fin-sln}) [@code{sln}] command computes the
  101. ``straight-line'' depreciation.  In this method, the asset depreciates
  102. by the same amount every year (or period).  For example,
  103. @samp{sln(12000, 2000, 5)} returns 2000.  The asset costs $12000
  104. initially and will be worth $2000 after five years; it loses $2000
  105. per year.
  106. X
  107. @kindex b Y
  108. @pindex calc-fin-syd
  109. @tindex syd
  110. The @kbd{b Y} (@code{calc-fin-syd}) [@code{syd}] command computes the
  111. accelerated ``sum-of-years'-digits'' depreciation.  Here the depreciation
  112. is higher during the early years of the asset's life.  Since the
  113. depreciation is different each year, @kbd{b Y} takes a fourth @var{period}
  114. parameter which specifies which year is requested, from 1 to @var{life}.
  115. If @var{period} is outside this range, the @code{syd} function will
  116. return zero.
  117. X
  118. @kindex b D
  119. @pindex calc-fin-ddb
  120. @tindex ddb
  121. The @kbd{b D} (@code{calc-fin-ddb}) [@code{ddb}] command computes an
  122. accelerated depreciation using the double-declining balance method.
  123. It also takes a fourth @var{period} parameter.
  124. X
  125. For symmetry, the @code{sln} function will accept a @var{period}
  126. parameter as well, although it will ignore its value except that the
  127. return value will as usual be zero if @var{period} is out of range.
  128. X
  129. For example, pushing the vector @cite{[1,2,3,4,5]} (using @kbd{v x 5})
  130. and then mapping @kbd{V M ' [sln(12000,2000,5,$), syd(12000,2000,5,$),
  131. ddb(12000,2000,5,$)] RET} produces a matrix that allows us to compare
  132. the three depreciation methods:
  133. X
  134. @group
  135. @example
  136. [ [ 2000, 3333, 4800 ]
  137. X  [ 2000, 2667, 2880 ]
  138. X  [ 2000, 2000, 1728 ]
  139. X  [ 2000, 1333,  592 ]
  140. X  [ 2000,  667,   0  ] ]
  141. @end example
  142. @end group
  143. X
  144. @noindent
  145. (Values have been rounded to nearest integers in this figure.)
  146. We see that @code{sln} depreciates by the same amount each year,
  147. @kbd{syd} depreciates more at the beginning and less at the end,
  148. and @kbd{ddb} weights the depreciation even more toward the beginning.
  149. X
  150. Summing columns with @kbd{V R : +} yields @cite{[10000, 10000, 10000]};
  151. the total depreciation in any method is (by definition) the
  152. difference between the cost and the salvage value.
  153. X
  154. @node Definitions of Financial Functions, , Depreciation Functions, Financial Functions
  155. @subsection Definitions
  156. X
  157. @noindent
  158. For your reference, here are the actual formulas used to compute
  159. Calc's financial functions.
  160. X
  161. Calc will not evaluate a financial function unless the @var{rate} or
  162. @var{n} argument is known.  However, @var{payment} or @var{amount} can
  163. be a variable.  Calc expands these functions according to the
  164. formulas below for symbolic arguments only when you use the @kbd{a "}
  165. (@code{calc-expand-formula}) command, or when taking derivatives or
  166. integrals or solving equations involving the functions.
  167. X
  168. @ifinfo
  169. These formulas are shown using the conventions of ``Big'' display
  170. mode (@kbd{d B}); for example, the formula for @code{fv} written
  171. linearly is @samp{pmt * ((1 + rate)^n) - 1) / rate}.
  172. X
  173. @example
  174. X                                        n
  175. X                              (1 + rate)  - 1
  176. fv(rate, n, pmt) =      pmt * ---------------
  177. X                                   rate
  178. X
  179. X                                         n
  180. X                              ((1 + rate)  - 1) (1 + rate)
  181. fvb(rate, n, pmt) =     pmt * ----------------------------
  182. X                                         rate
  183. X
  184. X                                        n
  185. fvl(rate, n, pmt) =     pmt * (1 + rate)
  186. X
  187. X                                            -n
  188. X                              1 - (1 + rate)  
  189. pv(rate, n, pmt) =      pmt * ----------------
  190. X                                    rate
  191. X
  192. X                                             -n
  193. X                              (1 - (1 + rate)  ) (1 + rate)
  194. pvb(rate, n, pmt) =     pmt * -----------------------------
  195. X                                         rate
  196. X
  197. X                                        -n
  198. pvl(rate, n, pmt) =     pmt * (1 + rate)
  199. X
  200. X                                    -1               -2               -3
  201. npv(rate, [a, b, c]) =  a*(1 + rate)   + b*(1 + rate)   + c*(1 + rate)
  202. X
  203. X                                        -1               -2
  204. npvb(rate, [a, b, c]) = a + b*(1 + rate)   + c*(1 + rate)
  205. X
  206. X                                             -n
  207. X                        (amt - x * (1 + rate)  ) * rate
  208. pmt(rate, n, amt, x) =  -------------------------------
  209. X                                             -n
  210. X                               1 - (1 + rate)
  211. X
  212. X                                             -n
  213. X                        (amt - x * (1 + rate)  ) * rate
  214. pmtb(rate, n, amt, x) = -------------------------------
  215. X                                        -n
  216. X                         (1 - (1 + rate)  ) (1 + rate)
  217. X
  218. X                                   amt * rate
  219. nper(rate, pmt, amt) =  - log(1 - ------------, 1 + rate)
  220. X                                      pmt
  221. X
  222. X                                    amt * rate
  223. nperb(rate, pmt, amt) = - log(1 - ---------------, 1 + rate)
  224. X                                  pmt * (1 + rate)
  225. X
  226. X                              amt
  227. nperl(rate, pmt, amt) = - log(---, 1 + rate)
  228. X                              pmt
  229. X
  230. X                           1/n
  231. X                        pmt
  232. ratel(n, pmt, amt) =    ------ - 1
  233. X                           1/n
  234. X                        amt
  235. X
  236. X                        cost - salv
  237. sln(cost, salv, life) = -----------
  238. X                           life
  239. X
  240. X                             (cost - salv) * (life - per + 1)
  241. syd(cost, salv, life, per) = --------------------------------
  242. X                                  life * (life + 1) / 2
  243. X
  244. X                             book * 2
  245. ddb(cost, salv, life, per) = --------,  book = cost - depreciation so far
  246. X                               life
  247. @end example
  248. @end ifinfo
  249. @tex
  250. \turnoffactive
  251. $$ \code{fv}(r, n, p) = p { (1 + r)^n - 1 \over r } $$
  252. $$ \code{fvb}(r, n, p) = p { ((1 + r)^n - 1) (1 + r) \over r } $$
  253. $$ \code{fvl}(r, n, p) = p (1 + r)^n $$
  254. $$ \code{pv}(r, n, p) = p { 1 - (1 + r)^{-n} \over r } $$
  255. $$ \code{pvb}(r, n, p) = p { (1 - (1 + r)^{-n}) (1 + r) \over r } $$
  256. $$ \code{pvl}(r, n, p) = p (1 + r)^{-n} $$
  257. $$ \code{npv}(r, [a,b,c]) = a (1 + r)^{-1} + b (1 + r)^{-2} + c (1 + r)^{-3} $$
  258. $$ \code{npvb}(r, [a,b,c]) = a + b (1 + r)^{-1} + c (1 + r)^{-2} $$
  259. $$ \code{pmt}(r, n, a, x) = { (a - x (1 + r)^{-n}) r \over 1 - (1 + r)^{-n} }$$
  260. $$ \code{pmtb}(r, n, a, x) = { (a - x (1 + r)^{-n}) r \over
  261. X                               (1 - (1 + r)^{-n}) (1 + r) } $$
  262. $$ \code{nper}(r, p, a) = -\code{log}(1 - { a r \over p }, 1 + r) $$
  263. $$ \code{nperb}(r, p, a) = -\code{log}(1 - { a r \over p (1 + r) }, 1 + r) $$
  264. $$ \code{nperl}(r, p, a) = -\code{log}({a \over p}, 1 + r) $$
  265. $$ \code{ratel}(n, p, a) = { p^{1/n} \over a^{1/n} } - 1 $$
  266. $$ \code{sln}(c, s, l) = { c - s \over l } $$
  267. $$ \code{syd}(c, s, l, p) = { (c - s) (l - p + 1) \over l (l+1) / 2 } $$
  268. $$ \code{ddb}(c, s, l, p) = { 2 (c - \hbox{depreciation so far}) \over l } $$
  269. @end tex
  270. X
  271. In @code{pmt} and @code{pmtb}, @cite{x=0} if omitted.
  272. X
  273. These functions accept any numeric objects, including error forms,
  274. intervals, and even (though not very usefully) complex numbers.  The
  275. above formulas specify exactly the behavior of these functions with
  276. all sorts of inputs.
  277. X
  278. Note that if the first argument to the @code{log} in @code{nper} is
  279. negative, @code{nper} leaves itself in symbolic form rather than
  280. returning a (financially meaningless) complex number.
  281. X
  282. @samp{rate(num, pmt, amt)} solves the equation
  283. @samp{pv(rate, num, pmt) = amt} for @samp{rate} using @kbd{H a R}
  284. (@code{calc-find-root}), with the interval @samp{[.01% .. 100%]}
  285. for an initial guess.  The @code{rateb} function is the same except
  286. that it uses @code{pvb}.  Note that @code{ratel} can be solved
  287. directly; its formula is shown in the above list.
  288. X
  289. Similarly, @samp{irr(pmts)} solves the equation @samp{npv(rate, pmts) = 0}
  290. for @samp{rate}.
  291. X
  292. If you give a fourth argument to @code{nper} or @code{nperb}, Calc
  293. will also use @kbd{H a R} to solve the equation using an initial
  294. guess interval of @samp{[0 .. 100]}.
  295. X
  296. A fourth argument to @code{fv} simply sums the two components
  297. calculated from the above formulas for @code{fv} and @code{fvl}.
  298. The same is true of @code{fvb}, @code{pv}, and @code{pvb}.
  299. X
  300. The @kbd{ddb} function is computed iteratively; the ``book'' value
  301. starts out equal to @var{cost}, and decreases according to the above
  302. formula for the specified number of periods.  If the book value
  303. would decrease below @var{salvage}, it only decreases to @var{salvage}
  304. and the depreciation is zero for all subsequent periods.  The @code{ddb}
  305. function returns the amount the book value decreased in the specified
  306. period.
  307. X
  308. The Calc financial function names were borrowed mostly from Microsoft
  309. Excel and Borland's Quattro.  The @code{ratel} function corresponds to
  310. @samp{@@CGR} in Borland's Reflex.  The @code{nper} and @code{nperl}
  311. functions correspond to @samp{@@TERM} and @samp{@@CTERM} in Quattro,
  312. respectively.  Beware that the Calc functions may take their arguments
  313. in a different order than your favorite spreadsheet.
  314. X
  315. @node Binary Functions, , Financial Functions, Arithmetic
  316. @section Binary Number Functions
  317. X
  318. @noindent
  319. The commands in this chapter all use two-letter sequences beginning with
  320. the @kbd{b} prefix.
  321. X
  322. @cindex Binary numbers
  323. The ``binary'' operations actually work regardless of the currently
  324. displayed radix, although their results make the most sense in a radix
  325. like 2, 8, or 16 (as obtained by the @kbd{d 2}, @kbd{d 8}, or @kbd{d 6}
  326. commands, respectively).  You may also wish to enable display of leading
  327. zeros with @kbd{d z}.  @xref{Radix Modes}.
  328. X
  329. @cindex Word size for binary operations
  330. The Calculator maintains a current @dfn{word size} @cite{w}, an
  331. arbitrary positive or negative integer.  For a positive word size, all
  332. of the binary operations described here operate modulo @cite{2^w}.  In
  333. particular, negative arguments are converted to positive integers modulo
  334. @cite{2^w} by all binary functions.@refill
  335. X
  336. If the word size is negative, binary operations produce 2's complement
  337. integers from @c{$-2^{-w-1}$}
  338. @cite{-(2^(-w-1))} to @c{$2^{-w-1}-1$}
  339. @cite{2^(-w-1)-1} inclusive.  Either
  340. mode accepts inputs in any range; the sign of @cite{w} affects only
  341. the results produced.
  342. X
  343. @kindex b c
  344. @pindex calc-clip
  345. @tindex clip
  346. The @kbd{b c} (@code{calc-clip})
  347. [@code{clip}] command can be used to clip a number by reducing it modulo
  348. @cite{2^w}.  The commands described in this chapter automatically clip
  349. their results to the current word size.  Note that other operations like
  350. addition do not use the current word size, since integer addition
  351. generally is not ``binary.''  (However, @pxref{Simplification Modes},
  352. @code{calc-bin-simplify-mode}.)  For example, with a word size of 8
  353. bits @kbd{b c} converts a number to the range 0 to 255; with a word
  354. size of -8 @kbd{b c} converts to the range -128 to 127.@refill
  355. X
  356. @kindex b w
  357. @pindex calc-word-size
  358. The default word size is 32 bits.  All operations except the shifts and
  359. rotates allow you to specify a different word size for that one
  360. operation by giving a numeric prefix argument:  @kbd{C-u 8 b c} clips the
  361. top of stack to the range 0 to 255 regardless of the current word size.
  362. To set the word size permanently, use @kbd{b w} (@code{calc-word-size}).
  363. This command displays a prompt with the current word size; press @key{RET}
  364. immediately to keep this word size, or type a new word size at the prompt.
  365. X
  366. When the binary operations are written in symbolic form, they take an
  367. optional second (or third) word-size parameter.  When a formula like
  368. @samp{and(a,b)} is finally evaluated, the word size current at that time
  369. will be used, but when @samp{and(a,b,-8)} is evaluated, a word size of
  370. @i{-8} will always be used.  A symbolic binary function will be left
  371. in symbolic form unless the all of its argument(s) are integers or
  372. integer-valued floats.
  373. X
  374. If either or both arguments are modulo forms for which @cite{M} is a
  375. power of two, that power of two is taken as the word size unless a
  376. numeric prefix argument overrides it.  The current word size is never
  377. consulted when modulo-power-of-two forms are involved.
  378. X
  379. @kindex b a
  380. @pindex calc-and
  381. @tindex and
  382. The @kbd{b a} (@code{calc-and}) [@code{and}] command computes the bitwise
  383. AND of the two numbers on the top of the stack.  In other words, for each
  384. of the @cite{w} binary digits of the two numbers (pairwise), the corresponding
  385. bit of the result is 1 if and only if both input bits are 1:
  386. @samp{and(2#1100, 2#1010) = 2#1000}.
  387. X
  388. @kindex b o
  389. @pindex calc-or
  390. @tindex or
  391. The @kbd{b o} (@code{calc-or}) [@code{or}] command computes the bitwise
  392. inclusive OR of two numbers.  A bit is 1 if either of the input bits, or
  393. both, are 1:  @samp{or(2#1100, 2#1010) = 2#1110}.
  394. X
  395. @kindex b x
  396. @pindex calc-xor
  397. @tindex xor
  398. The @kbd{b x} (@code{calc-xor}) [@code{xor}] command computes the bitwise
  399. exclusive OR of two numbers.  A bit is 1 if exactly one of the input bits
  400. is 1:  @samp{xor(2#1100, 2#1010) = 2#0110}.
  401. X
  402. @kindex b d
  403. @pindex calc-diff
  404. @tindex diff
  405. The @kbd{b d} (@code{calc-diff}) [@code{diff}] command computes the bitwise
  406. difference of two numbers; this is defined by @samp{diff(a,b) = and(a,not(b))},
  407. so that @samp{diff(2#1100, 2#1010) = 2#0100}.
  408. X
  409. @kindex b n
  410. @pindex calc-not
  411. @tindex not
  412. The @kbd{b n} (@code{calc-not}) [@code{not}] command computes the bitwise
  413. NOT of a number.  A bit is 1 if the input bit is 0 and vice-versa.
  414. X
  415. @kindex b l
  416. @pindex calc-lshift-binary
  417. @tindex lsh
  418. The @kbd{b l} (@code{calc-lshift-binary}) [@code{lsh}] command shifts a
  419. number left by one bit, or by the number of bits specified in the numeric
  420. prefix argument.  A negative prefix argument performs a logical right shift,
  421. in which zeros are shifted in on the left.  In symbolic form, @samp{lsh(a)}
  422. is short for @samp{lsh(a,1)}, which in turn is short for @samp{lsh(a,n,w)}.
  423. Bits shifted ``off the end,'' according to the current word size, are lost.
  424. X
  425. @kindex H b l
  426. The @kbd{H b l} command also does a left shift, but it takes two arguments
  427. from the stack (the value to shift, and, at top-of-stack, the number of
  428. bits to shift).  This version interprets the prefix argument just like
  429. the regular binary operations, i.e., as a word size.  The Hyperbolic flag
  430. has a similar effect on the rest of the binary shift and rotate commands.
  431. X
  432. @kindex b r
  433. @kindex H b r
  434. @pindex calc-rshift-binary
  435. @tindex rsh
  436. The @kbd{b r} (@code{calc-rshift-binary}) [@code{rsh}] command shifts a
  437. number right by one bit, or by the number of bits specified in the numeric
  438. prefix argument:  @samp{rsh(a,n) = lsh(a,-n)}.
  439. X
  440. @kindex b L
  441. @kindex H b L
  442. @pindex calc-lshift-arith
  443. @tindex ash
  444. The @kbd{b L} (@code{calc-lshift-arith}) [@code{ash}] command shifts a
  445. number left.  It is analogous to @code{lsh}, except that if the shift
  446. is rightward (the prefix argument is negative), an arithmetic shift
  447. is performed as described below.
  448. X
  449. @kindex b R
  450. @kindex H b R
  451. @pindex calc-rshift-arith
  452. @tindex rash
  453. The @kbd{b R} (@code{calc-rshift-arith}) [@code{rash}] command performs
  454. an ``arithmetic'' shift to the right, in which the leftmost bit (according
  455. to the current word size) is duplicated rather than shifting in zeros.
  456. This corresponds to dividing by a power of two where the input is interpreted
  457. as a signed, twos-complement number.  (The distinction between the @samp{rsh}
  458. and @samp{rash} operations is totally independent from whether the word
  459. size is positive or negative.)  With a negative prefix argument, this
  460. performs a standard left shift.
  461. X
  462. @kindex b t
  463. @kindex H b t
  464. @pindex calc-rotate-binary
  465. @tindex rot
  466. The @kbd{b t} (@code{calc-rotate-binary}) [@code{rot}] command rotates a
  467. number one bit to the left.  The leftmost bit (according to the current
  468. word size) is dropped off the left and shifted in on the right.  With a
  469. numeric prefix argument, the number is rotated that many bits to the left
  470. or right.
  471. X
  472. @xref{Set Operations}, for the @kbd{b p} and @kbd{b u} commands that
  473. pack and unpack binary integers into sets.  (For example, @kbd{b u}
  474. unpacks the number @samp{2#11001} to the set of bit-numbers
  475. @samp{[0, 3, 4]}.)  Type @kbd{b u V #} to count the number of ``1''
  476. bits in a binary integer.
  477. X
  478. Another interesting use of the set representation of binary integers
  479. is to reverse the bits in, say, a 32-bit integer.  Type @kbd{b u} to
  480. unpack; type @kbd{31 TAB -} to replace each bit-number in the set
  481. with 31 minus that bit-number; type @kbd{b p} to pack the set back
  482. into a binary integer.
  483. X
  484. @node Scientific Functions, Matrix Functions, Arithmetic, Top
  485. @chapter Scientific Functions
  486. X
  487. @noindent
  488. The functions described here perform trigonometric and other transcendental
  489. calculations.  They generally produce floating-point answers correct to the
  490. full current precision.  The @kbd{H} (Hyperbolic) and @kbd{I} (Inverse)
  491. flag keys must be used to get some of these functions from the keyboard.
  492. X
  493. @kindex P
  494. @pindex calc-pi
  495. @cindex @code{pi} variable
  496. @vindex pi
  497. @kindex H P
  498. @cindex @code{e} variable
  499. @vindex e
  500. @kindex I P
  501. @cindex @code{gamma} variable
  502. @vindex gamma
  503. @cindex Gamma constant, Euler's
  504. @cindex Euler's gamma constant
  505. @kindex H I P
  506. @cindex @code{phi} variable
  507. @cindex Phi, golden ratio
  508. @cindex Golden ratio
  509. One miscellanous command is shift-@kbd{P} (@code{calc-pi}), which pushes
  510. the value of @c{$\pi$}
  511. @cite{pi} (at the current precision) onto the stack.  With the
  512. Hyperbolic flag, it pushes the value @cite{e}, the base of natural logarithms.
  513. With the Inverse flag, it pushes Euler's constant @c{$\gamma$}
  514. @cite{gamma} (about 0.577).  With both Inverse and Hyperbolic, it
  515. pushes the ``golden ratio'' @c{$\phi$}
  516. @cite{phi} (about 1.618).  (At present, Euler's constant is not available
  517. to unlimited precision; Calc knows only the first 100 digits.)
  518. In Symbolic mode, these commands push the
  519. actual variables @samp{pi}, @samp{e}, @samp{gamma}, and @samp{phi},
  520. respectively, instead of their values; @pxref{Symbolic Mode}.@refill
  521. X
  522. @tindex sqr
  523. The @kbd{Q} (@code{calc-sqrt}) [@code{sqrt}] function is described elsewhere;
  524. @pxref{Basic Arithmetic}.  With the Inverse flag [@code{sqr}], this command
  525. computes the square of the argument.
  526. X
  527. @xref{Prefix Arguments}, for a discussion of the effect of numeric
  528. prefix arguments on commands in this chapter which do not otherwise
  529. interpret a prefix argument.
  530. X
  531. @menu
  532. * Logarithmic Functions::
  533. * Trigonometric and Hyperbolic Functions::
  534. * Advanced Math Functions::
  535. * Branch Cuts::
  536. * Random Numbers::
  537. * Combinatorial Functions::
  538. * Probability Distribution Functions::
  539. @end menu
  540. X
  541. @node Logarithmic Functions, Trigonometric and Hyperbolic Functions, Scientific Functions, Scientific Functions
  542. @section Logarithmic Functions
  543. X
  544. @noindent
  545. @kindex L
  546. @kindex I E
  547. @pindex calc-ln
  548. @tindex ln
  549. The shift-@kbd{L} (@code{calc-ln}) [@code{ln}] command computes the natural
  550. logarithm of the real or complex number on the top of the stack.  With
  551. the Inverse flag it computes the exponential function instead, although
  552. this is redundant with the @kbd{E} command.
  553. X
  554. @kindex E
  555. @kindex I L
  556. @pindex calc-exp
  557. @tindex exp
  558. The shift-@kbd{E} (@code{calc-exp}) [@code{exp}] command computes the
  559. exponential, i.e., @cite{e} raised to the power of the number on the stack.
  560. The meanings of the Inverse and Hyperbolic flags follow from those for
  561. the @code{calc-ln} command.
  562. X
  563. @kindex H L
  564. @kindex H I L
  565. @kindex H E
  566. @kindex H I E
  567. @pindex calc-log10
  568. @tindex log10
  569. @tindex exp10
  570. The @kbd{H L} (@code{calc-log10}) [@code{log10}] command computes the common
  571. (base-10) logarithm of a number.  The meanings of the Inverse [@code{exp10}]
  572. and Hyperbolic flags follow from those for the @kbd{L} command.  Note
  573. that the common logarithm of a complex number is computed by taking the
  574. natural logarithm and dividing by @c{$\ln10$}
  575. @cite{ln(10)}.
  576. X
  577. @kindex B
  578. @kindex I B
  579. @pindex calc-log
  580. @tindex log
  581. @tindex alog
  582. The @kbd{B} (@code{calc-log}) [@code{log}] command computes a logarithm
  583. to any base.  For example, @kbd{1024 @key{RET} 2 B} produces 10, since
  584. @c{$2^{10} = 1024$}
  585. @cite{2^10 = 1024}.  In certain cases like @samp{log(3,9)}, the result
  586. will be either @cite{1:2} or @cite{0.5} depending on the current Fraction
  587. Mode setting.  With the Inverse flag [@code{alog}], this command is
  588. similar to @kbd{^} except that the order of the arguments is reversed.
  589. X
  590. @kindex f I
  591. @pindex calc-ilog
  592. @tindex ilog
  593. The @kbd{f I} (@code{calc-ilog}) [@code{ilog}] command computes the
  594. integer logarithm of a number to any base.  The number and the base must
  595. themselves be positive integers.  This is the true logarithm, rounded
  596. down to an integer.  Thus @kbd{ilog(x,10)} is 3 for all @cite{x} in the
  597. range from 1000 to 9999.  If both arguments are positive integers, exact
  598. integer arithmetic is used; otherwise, this is equivalent to
  599. @samp{floor(log(x,b))}.
  600. X
  601. @kindex f E
  602. @pindex calc-expm1
  603. @tindex expm1
  604. The @kbd{f E} (@code{calc-expm1}) [@code{expm1}] command computes
  605. @c{$e^x - 1$}
  606. @cite{exp(x)-1}, but using an algorithm that produces a more accurate
  607. answer when the result is close to zero, i.e., when @c{$e^x$}
  608. @cite{exp(x)} is close
  609. to one.
  610. X
  611. @kindex f L
  612. @pindex calc-lnp1
  613. @tindex lnp1
  614. The @kbd{f L} (@code{calc-lnp1}) [@code{lnp1}] command computes
  615. @c{$\ln(x+1)$}
  616. @cite{ln(x+1)}, producing a more accurate answer when @cite{x} is close
  617. to zero.
  618. X
  619. @node Trigonometric and Hyperbolic Functions, Advanced Math Functions, Logarithmic Functions, Scientific Functions
  620. @section Trigonometric/Hyperbolic Functions
  621. X
  622. @noindent
  623. @kindex S
  624. @pindex calc-sin
  625. @tindex sin
  626. The shift-@kbd{S} (@code{calc-sin}) [@code{sin}] command computes the sine
  627. of an angle or complex number.  If the input is an HMS form, it is interpreted
  628. as degrees-minutes-seconds; otherwise, the input is interpreted according
  629. to the current angular mode.  It is best to use Radians mode when operating
  630. on complex numbers.@refill
  631. X
  632. Calc's ``units'' mechanism includes angular units like @code{deg},
  633. @code{rad}, and @code{grad}.  While @samp{sin(45 deg)} is not evaluated
  634. all the time, the @kbd{u s} (@code{calc-simplify-units}) command will
  635. simplify @samp{sin(45 deg)} by taking the sine of 45 degrees, regardless
  636. of the current angular mode.  @xref{Basic Operations on Units}.
  637. X
  638. Also, the symbolic variable @code{pi} is not ordinarily recognized in
  639. arguments to trigonometric functions, as in @samp{sin(3 pi / 4)}, but
  640. the @kbd{a s} (@code{calc-simplify}) command recognizes many such
  641. formulas when the current angular mode is radians @emph{and} symbolic
  642. mode is enabled; this example would be replaced by @samp{sqrt(2) / 2}.
  643. @xref{Symbolic Mode}.  Beware, this simplification occurs even if you
  644. have stored a different value in the variable @samp{pi}; this is one
  645. reason why changing built-in variables is a bad idea.  Arguments of
  646. the form @cite{x} plus a multiple of @c{$\pi/2$}
  647. @cite{pi/2} are also simplified.
  648. Calc includes similar formulas for @code{cos} and @code{tan}.@refill
  649. X
  650. The @kbd{a s} command knows all angles which are integer multiples of
  651. @c{$\pi/12$}
  652. @cite{pi/12}, @c{$\pi/10$}
  653. @cite{pi/10}, or @c{$\pi/8$}
  654. @cite{pi/8} radians.  In degrees mode,
  655. analogous simplifications occur for integer multiples of 15 or 18
  656. degrees, and for arguments plus multiples of 90 degrees.
  657. X
  658. @kindex I S
  659. @pindex calc-arcsin
  660. @tindex arcsin
  661. With the Inverse flag, @code{calc-sin} computes an arcsine.  This is also
  662. available as the @code{calc-arcsin} command or @code{arcsin} algebraic
  663. function.  The returned argument is converted to degrees, radians, or HMS
  664. notation depending on the current angular mode.
  665. X
  666. @kindex H S
  667. @pindex calc-sinh
  668. @tindex sinh
  669. @kindex H I S
  670. @pindex calc-arcsinh
  671. @tindex arcsinh
  672. With the Hyperbolic flag, @code{calc-sin} computes the hyperbolic
  673. sine, also available as @code{calc-sinh} [@code{sinh}].  With the
  674. Hyperbolic and Inverse flags, it computes the hyperbolic arcsine
  675. (@code{calc-arcsinh}) [@code{arcsinh}].
  676. X
  677. @kindex C
  678. @pindex calc-cos
  679. @tindex cos
  680. @kindex I C
  681. @pindex calc-arccos
  682. @tindex arccos
  683. @kindex H C
  684. @pindex calc-cosh
  685. @tindex cosh
  686. @kindex H I C
  687. @pindex calc-arccosh
  688. @tindex arccosh
  689. @kindex T
  690. @pindex calc-tan
  691. @tindex tan
  692. @kindex I T
  693. @pindex calc-arctan
  694. @tindex arctan
  695. @kindex H T
  696. @pindex calc-tanh
  697. @tindex tanh
  698. @kindex H I T
  699. @pindex calc-arctanh
  700. @tindex arctanh
  701. The shift-@kbd{C} (@code{calc-cos}) [@code{cos}] command computes the cosine
  702. of an angle or complex number, and shift-@kbd{T} (@code{calc-tan}) [@code{tan}]
  703. computes the tangent, along with all the various inverse and hyperbolic
  704. variants of these functions.
  705. X
  706. @kindex f T
  707. @pindex calc-arctan2
  708. @tindex arctan2
  709. The @kbd{f T} (@code{calc-arctan2}) [@code{arctan2}] command takes two
  710. numbers from the stack and computes the arc tangent of their ratio.  The
  711. result is in the full range from @i{-180} (exclusive) to @i{+180}
  712. (inclusive) degrees, or the analogous range in radians.  A similar
  713. result would be obtained with @kbd{/} followed by @kbd{I T}, but the
  714. value would only be in the range from @i{-90} to @i{+90} degrees
  715. since the division loses information about the signs of the two
  716. components, and an error might result from an explicit division by zero
  717. which @code{arctan2} would avoid.  By (arbitrary) definition,
  718. @samp{arctan2(0,0)=0}.
  719. X
  720. @pindex calc-sincos
  721. @tindex sincos
  722. @tindex arcsincos
  723. The @code{calc-sincos} [@code{sincos}] command computes the sine and
  724. cosine of a number, returning them as a vector of the form
  725. @samp{[@var{cos}, @var{sin}]}.
  726. With the Inverse flag [@code{arcsincos}], this command takes a two-element
  727. vector as an argument and computes @code{arctan2} of the elements.
  728. (This command does not accept the Hyperbolic flag.)@refill
  729. X
  730. @node Advanced Math Functions, Branch Cuts, Trigonometric and Hyperbolic Functions, Scientific Functions
  731. @section Advanced Mathematical Functions
  732. X
  733. @noindent
  734. Calc can compute a variety of less common functions that arise in
  735. various branches of mathematics.  All of the functions described in
  736. this section allow arbitrary complex arguments and, except as noted,
  737. will work to arbitrarily large precisions.  They can not at present
  738. handle error forms or intervals as arguments.
  739. X
  740. NOTE:  These functions are still experimental.  In particular, their
  741. accuracy is not guaranteed in all domains.  It is advisable to set the
  742. current precision comfortably higher than you actually need when
  743. using these functions.  Also, these functions may be impractically
  744. slow for some values of the arguments.
  745. X
  746. @kindex f g
  747. @pindex calc-gamma
  748. @tindex gamma
  749. The @kbd{f g} (@code{calc-gamma}) [@code{gamma}] command computes the Euler
  750. gamma function.  For positive integer arguments, this is related to the
  751. factorial function:  @samp{gamma(n+1) = fact(n)}.  For general complex
  752. arguments the gamma function can be defined by the following definite
  753. integral:  @c{$\Gamma(a) = \int_0^\infty t^{a-1} e^t dt$}
  754. @cite{gamma(a) = integ(t^(a-1) exp(t), t, 0, inf)}.
  755. (The actual implementation uses far more efficient computational methods.)
  756. X
  757. @kindex f G
  758. @kindex I f G
  759. @kindex H f G
  760. @kindex H I f G
  761. @pindex calc-inc-gamma
  762. @tindex gammaP
  763. @tindex gammaQ
  764. @tindex gammag
  765. @tindex gammaG
  766. The @kbd{f G} (@code{calc-inc-gamma}) [@code{gammaP}] command computes
  767. the incomplete gamma function, denoted @samp{P(a,x)}.  This is defined by
  768. the integral, @c{$P(a,x) = \left( \int_0^x t^{a-1} e^t dt \right) / \Gamma(a)$}
  769. @cite{gammaP(a,x) = integ(t^(a-1) exp(t), t, 0, x) / gamma(a)}.
  770. This implies that @samp{gammaP(a,inf) = 1} for any @cite{a} (see the
  771. definition of the normal gamma function).
  772. X
  773. Several other varieties of incomplete gamma function are defined.
  774. The complement of @cite{P(a,x)}, called @cite{Q(a,x) = 1-P(a,x)} by
  775. some authors, is computed by the @kbd{I f G} [@code{gammaQ}] command.
  776. You can think of this as taking the other half of the integral, from
  777. @cite{x} to infinity.
  778. X
  779. @ifinfo
  780. The functions corresponding to the integrals that define @cite{P(a,x)}
  781. and @cite{Q(a,x)} but without the normalizing @cite{1/gamma(a)}
  782. factor are called @cite{g(a,x)} and @cite{G(a,x)}, respectively
  783. (where @cite{g} and @cite{G} represent the lower- and upper-case Greek
  784. letter gamma).  You can obtain these using the @kbd{H f G} [@code{gammag}]
  785. and @kbd{H I f G} [@code{gammaG}] commands.
  786. @end ifinfo
  787. @tex
  788. \turnoffactive
  789. The functions corresponding to the integrals that define $P(a,x)$
  790. and $Q(a,x)$ but without the normalizing $1/\Gamma(a)$
  791. factor are called $\gamma(a,x)$ and $\Gamma(a,x)$, respectively.
  792. You can obtain these using the \kbd{H f G} [\code{gammag}] and
  793. \kbd{I H f G} [\code{gammaG}] commands.
  794. @end tex
  795. X
  796. @kindex f b
  797. @pindex calc-beta
  798. @tindex beta
  799. The @kbd{f b} (@code{calc-beta}) [@code{beta}] command computes the
  800. Euler beta function, which is defined in terms of the gamma function as
  801. @c{$B(a,b) = \Gamma(a) \Gamma(b) / \Gamma(a+b)$}
  802. @cite{beta(a,b) = gamma(a) gamma(b) / gamma(a+b)}, or by
  803. @c{$B(a,b) = \int_0^1 t^{a-1} (1-t)^{b-1} dt$}
  804. @cite{beta(a,b) = integ(t^(a-1) (1-t)^(b-1), t, 0, 1)}.
  805. X
  806. @kindex f B
  807. @kindex H f B
  808. @pindex calc-inc-beta
  809. @tindex betaI
  810. @tindex betaB
  811. The @kbd{f B} (@code{calc-inc-beta}) [@code{betaI}] command computes
  812. the incomplete beta function @cite{I(x,a,b)}.  It is defined by
  813. @c{$I(x,a,b) = \left( \int_0^x t^{a-1} (1-t)^{b-1} dt \right) / B(a,b)$}
  814. @cite{betaI(x,a,b) = integ(t^(a-1) (1-t)^(b-1), t, 0, x) / beta(a,b)}.
  815. Once again, the @kbd{H} (hyperbolic) prefix gives the corresponding
  816. un-normalized version [@code{betaB}].
  817. X
  818. @kindex f e
  819. @kindex I f e
  820. @pindex calc-erf
  821. @tindex erf
  822. @tindex erfc
  823. The @kbd{f e} (@code{calc-erf}) [@code{erf}] command computes the
  824. error function @c{$\hbox{erf}(x) = {2 \over \sqrt{\pi}} \int_0^x e^{-t^2} dt$}
  825. @cite{erf(x) = 2 integ(exp(-(t^2)), t, 0, x) / sqrt(pi)}.
  826. The complementary error function @kbd{I f e} (@code{calc-erfc}) [@code{erfc}]
  827. is the corresponding integral from @samp{x} to infinity; the sum
  828. @c{$\hbox{erf}(x) + \hbox{erfc}(x) = 1$}
  829. @cite{erf(x) + erfc(x) = 1}.
  830. X
  831. @kindex f j
  832. @kindex f y
  833. @pindex calc-bessel-J
  834. @pindex calc-bessel-Y
  835. @tindex besJ
  836. @tindex besY
  837. The @kbd{f j} (@code{calc-bessel-J}) [@code{besJ}] and @kbd{f y}
  838. (@code{calc-bessel-Y}) [@code{besY}] commands compute the Bessel
  839. functions of the first and second kinds, respectively.
  840. In @samp{besJ(n,x)} and @samp{besY(n,x)} the ``order'' parameter
  841. @cite{n} is often an integer, but is not required to be one.
  842. Calc's implementation of the Bessel functions currently limits the
  843. precision to 8 digits, and may not be exact even to that precision.
  844. Use with care!@refill
  845. X
  846. @node Branch Cuts, Random Numbers, Advanced Math Functions, Scientific Functions
  847. @section Branch Cuts and Principal Values
  848. X
  849. @noindent
  850. @cindex Branch cuts
  851. @cindex Principal values
  852. All of the logarithmic, trigonometric, and other scientific functions are
  853. defined for complex numbers as well as for reals.
  854. This section describes the values
  855. returned in cases where the general result is a family of possible values.
  856. Calc follows section 12.5.3 of Steele's @dfn{Common Lisp, the Language},
  857. second edition, in these matters.  This section will describe each
  858. function briefly; for a more detailed discussion (including some nifty
  859. diagrams), consult Steele's book.
  860. X
  861. Note that the branch cuts for @code{arctan} and @code{arctanh} were
  862. changed between the first and second editions of Steele.  Versions of
  863. Calc starting with 2.00 follow the second edition.
  864. X
  865. The new branch cuts exactly match those of the HP-28/48 calculators.
  866. They also match those of Mathematica 1.2, except that Mathematica's
  867. @code{arctan} cut is always in the right half of the complex plane,
  868. and its @code{arctanh} cut is always in the top half of the plane.
  869. Calc's cuts are continuous with quadrants I and III for @code{arctan},
  870. or II and IV for @code{arctanh}.
  871. X
  872. Note:  The current implementations of these functions with complex arguments
  873. are designed with proper behavior around the branch cuts in mind, @emph{not}
  874. efficiency or accuracy.  You may need to increase the floating precision
  875. and wait a while to get suitable answers from them.
  876. X
  877. For @samp{sqrt(a+bi)}:  When @cite{a<0} and @cite{b} is small but positive
  878. or zero, the result is close to the @cite{+i} axis.  For @cite{b} small and
  879. negative, the result is close to the @cite{-i} axis.  The result always lies
  880. in the right half of the complex plane.
  881. X
  882. For @samp{ln(a+bi)}:  The real part is defined as @samp{ln(abs(a+bi))}.
  883. The imaginary part is defined as @samp{arg(a+bi) = arctan2(b,a)}.
  884. Thus the branch cuts for @code{sqrt} and @code{ln} both lie on the
  885. negative real axis.
  886. X
  887. The following table describes these branch cuts in another way.
  888. If the real and imaginary parts of @cite{z} are as shown, then
  889. the real and imaginary parts of @cite{f(z)} will be as shown.
  890. Here @code{eps} stands for a small positive value; each
  891. occurrence of @code{eps} may stand for a different small value.
  892. X
  893. @smallexample
  894. X     z           sqrt(z)       ln(z)
  895. ----------------------------------------
  896. X   +,   0         +,  0       any, 0
  897. X   -,   0         0,  +       any, pi
  898. X   -, +eps      +eps, +      +eps, +
  899. X   -, -eps      +eps, -      +eps, -
  900. @end smallexample
  901. X
  902. For @samp{z1^z2}:  This is defined by @samp{exp(ln(z1)*z2)}.
  903. One interesting consequence of this is that @samp{(-8)^1:3} does
  904. not evaluate to @i{-2} as you might expect, but to the complex
  905. number @cite{(1., 1.732)}.  Both of these are valid cube roots
  906. of @i{-8} (as is @cite{(1., -1.732)}); Calc chooses a perhaps
  907. less-obvious root for the sake of mathematical consistency.
  908. X
  909. For @samp{arcsin(z)}:  This is defined by @samp{-i*ln(i*z + sqrt(1-z^2))}.
  910. The branch cuts are on the real axis, less than @i{-1} and greater than 1.
  911. X
  912. For @samp{arccos(z)}:  This is defined by @samp{-i*ln(z + i*sqrt(1-z^2))},
  913. or equivalently by @samp{pi/2 - arcsin(z)}.  The branch cuts are on
  914. the real axis, less than @i{-1} and greater than 1.
  915. X
  916. For @samp{arctan(z)}:  This is defined by
  917. @samp{(ln(1+i*z) - ln(1-i*z)) / (2*i)}.  The branch cuts are on the
  918. imaginary axis, below @cite{-i} and above @cite{i}.
  919. X
  920. For @samp{arcsinh(z)}:  This is defined by @samp{ln(z + sqrt(1+z^2))}.
  921. The branch cuts are on the imaginary axis, below @cite{-i} and
  922. above @cite{i}.
  923. X
  924. For @samp{arccosh(z)}:  This is defined by
  925. @samp{ln(z + (z+1)*sqrt((z-1)/(z+1)))}.  The branch cut is on the
  926. real axis less than 1.
  927. X
  928. For @samp{arctanh(z)}:  This is defined by @samp{(ln(1+z) - ln(1-z)) / 2}.
  929. The branch cuts are on the real axis, less than @i{-1} and greater than 1.
  930. X
  931. The following entries for @code{arcsin}, @code{arccos}, and
  932. @code{arctan} assume the current angular mode is radians.  The
  933. hyperbolic functions operate independently of the angular mode.
  934. X
  935. @smallexample
  936. X       z             arcsin(z)            arccos(z)
  937. -------------------------------------------------------
  938. X (-1..1),  0      (-pi/2..pi/2), 0       (0..pi), 0
  939. X (-1..1), +eps    (-pi/2..pi/2), +eps    (0..pi), -eps
  940. X (-1..1), -eps    (-pi/2..pi/2), -eps    (0..pi), +eps
  941. X   <-1,    0          -pi/2,     +         pi,    -
  942. X   <-1,  +eps      -pi/2 + eps,  +      pi - eps, -
  943. X   <-1,  -eps      -pi/2 + eps,  -      pi - eps, +
  944. X    >1,    0           pi/2,     -          0,    +
  945. X    >1,  +eps       pi/2 - eps,  +        +eps,   -
  946. X    >1,  -eps       pi/2 - eps,  -        +eps,   +
  947. @end smallexample
  948. X
  949. @smallexample
  950. X       z            arccosh(z)         arctanh(z)
  951. -----------------------------------------------------
  952. X (-1..1),  0        0,  (0..pi)       any,     0
  953. X (-1..1), +eps    +eps, (0..pi)       any,    +eps
  954. X (-1..1), -eps    +eps, (-pi..0)      any,    -eps
  955. X   <-1,    0        +,    pi           -,     pi/2
  956. X   <-1,  +eps       +,  pi - eps       -,  pi/2 - eps
  957. X   <-1,  -eps       +, -pi + eps       -, -pi/2 + eps
  958. X    >1,    0        +,     0           +,    -pi/2
  959. X    >1,  +eps       +,   +eps          +,  pi/2 - eps
  960. X    >1,  -eps       +,   -eps          +, -pi/2 + eps
  961. @end smallexample
  962. X
  963. @smallexample
  964. X       z           arcsinh(z)           arctan(z)
  965. -----------------------------------------------------
  966. X   0, (-1..1)    0, (-pi/2..pi/2)         0,     any
  967. X   0,   <-1      -,    -pi/2            -pi/2,    -
  968. X +eps,  <-1      +, -pi/2 + eps       pi/2 - eps, -
  969. X -eps,  <-1      -, -pi/2 + eps      -pi/2 + eps, -
  970. X   0,    >1      +,     pi/2             pi/2,    +
  971. X +eps,   >1      +,  pi/2 - eps       pi/2 - eps, +
  972. X -eps,   >1      -,  pi/2 - eps      -pi/2 + eps, +
  973. @end smallexample
  974. X
  975. Finally, the following identities help to illustrate the relationship
  976. between the complex trigonometric and hyperbolic functions.  They
  977. are valid everywhere, including on the branch cuts.
  978. X
  979. @smallexample
  980. sin(i*z)  = i*sinh(z)       arcsin(i*z)  = i*arcsinh(z)
  981. cos(i*z)  =   cosh(z)       arcsinh(i*z) = i*arcsin(z)
  982. tan(i*z)  = i*tanh(z)       arctan(i*z)  = i*arctanh(z)
  983. sinh(i*z) = i*sin(z)        cosh(i*z)    =   cos(z)
  984. @end smallexample
  985. X
  986. The ``advanced math'' functions (gamma, Bessel, etc.) are also defined
  987. for general complex arguments, but their branch cuts and principal values
  988. are not rigorously specified at present.
  989. X
  990. @node Random Numbers, Combinatorial Functions, Branch Cuts, Scientific Functions
  991. @section Random Numbers
  992. X
  993. @noindent
  994. @kindex k r
  995. @pindex calc-random
  996. @tindex random
  997. The @kbd{k r} (@code{calc-random}) [@code{random}] command produces
  998. random numbers of various sorts.
  999. X
  1000. Given a positive numeric prefix argument @cite{M}, it produces a random
  1001. integer @cite{N} in the range @c{$0 \le N < M$}
  1002. @cite{0 <= N < M}.  Each of the @cite{M}
  1003. values appears with equal probability.@refill
  1004. X
  1005. With no numeric prefix argument, the @kbd{k r} command takes its argument
  1006. from the stack instead.  Once again, if this is a positive integer @cite{M}
  1007. the result is a random integer less than @cite{M}.  However, note that
  1008. while numeric prefix arguments are limited to six digits or so, an @cite{M}
  1009. taken from the stack can be arbitrarily large.  If @cite{M} is negative,
  1010. the result is a random integer in the range @c{$M < N \le 0$}
  1011. @cite{M < N <= 0}.
  1012. X
  1013. If the value on the stack is a floating-point number @cite{M}, the result
  1014. is a random floating-point number @cite{N} in the range @c{$0 \le N < M$}
  1015. @cite{0 <= N < M}
  1016. or @c{$M < N \le 0$}
  1017. @cite{M < N <= 0}, according to the sign of @cite{M}.
  1018. X
  1019. If @cite{M} is zero, the result is a Gaussian-distributed random real
  1020. number; the distribution has a mean of zero and a standard deviation
  1021. of one.  The algorithm used generates random numbers in pairs; thus,
  1022. every other call to this function will be especially fast.
  1023. X
  1024. If @cite{M} is an error form @c{$m$ @code{+/-} $\sigma$}
  1025. @samp{@var{m} +/- @var{s}} where @var{m}
  1026. and @c{$\sigma$}
  1027. @var{s} are both real numbers, the result uses a Gaussian
  1028. distribution with mean @var{m} and standard deviation @c{$\sigma$}
  1029. @var{s}.
  1030. X
  1031. If @cite{M} is an interval form, the lower and upper bounds specify the
  1032. acceptable limits of the random numbers.  If both bounds are integers,
  1033. the result is a random integer in the specified range.  If either bound
  1034. is floating-point, the result is a random real number in the specified
  1035. range.  If the interval is open at enter end, the result will be sure
  1036. not to equal that end value.  (This makes a big difference for integer
  1037. intervals, but for floating-point intervals it's relatively minor:
  1038. with a precision of 6, @samp{random([1.0..2.0))} will return any of one
  1039. million numbers from 1.00000 to 1.99999; @samp{random([1.0..2.0])} may
  1040. additionally return 2.00000, but the probability of this happening is
  1041. extremely small.)
  1042. X
  1043. If @cite{M} is a vector, the result is one element taken at random from
  1044. the vector.  All elements of the vector are given equal probabilities.
  1045. X
  1046. @vindex RandSeed
  1047. The sequence of numbers produced by @kbd{k r} is completely random by
  1048. default, i.e., the sequence is seeded each time you start Calc using
  1049. the current time and other information.  You can get a reproducible
  1050. sequence by storing a particular ``seed value'' in the Calc variable
  1051. @code{RandSeed}.  Any integer will do for a seed; integers of from 1
  1052. to 12 digits are good.  If you later store a different integer into
  1053. @code{RandSeed}, Calc will switch to a different pseudo-random
  1054. sequence.  If you ``unstore'' @code{RandSeed}, Calc will re-seed itself
  1055. from the current time.  If you store the same integer that you used
  1056. before back into @code{RandSeed}, you will get the exact same sequence
  1057. of random numbers as before.
  1058. X
  1059. @pindex calc-rrandom
  1060. The @code{calc-rrandom} command produces a random real number between
  1061. zero and one.  It is equivalent to @samp{random(1.0)}.
  1062. X
  1063. @kindex k a
  1064. @pindex calc-random-again
  1065. The @kbd{k a} (@code{calc-random-again}) command produces another random
  1066. number, re-using the most recent value of @cite{M}.  With a numeric
  1067. prefix argument @var{n}, it produces @var{n} more random numbers using
  1068. that value of @cite{M}.
  1069. X
  1070. @kindex k h
  1071. @pindex calc-shuffle
  1072. @tindex shuffle
  1073. The @kbd{k h} (@code{calc-shuffle}) command produces a vector of several
  1074. random values with no duplicates.  The value on the top of the stack
  1075. specifies the set from which the random values are drawn, and may be any
  1076. of the @cite{M} formats described above.  The numeric prefix argument
  1077. gives the length of the desired list.  (If you do not provide a numeric
  1078. prefix argument, the length of the list is taken from the top of the
  1079. stack, and @cite{M} from second-to-top.)
  1080. X
  1081. If @cite{M} is a floating-point number, zero, or an error form (so
  1082. that the random values are being drawn from the set of real numbers)
  1083. there is little practical difference between using @kbd{k h} and using
  1084. @kbd{k r} several times.  But if the set of possible values consists
  1085. of just a few integers, or the elements of a vector, then there is
  1086. a very real chance that multiple @kbd{k r}'s will produce the same
  1087. number more than once.  The @kbd{k h} command produces a vector whose
  1088. elements are always distinct.  (Actually, there is a slight exception:
  1089. If @cite{M} is a vector, no given vector element will be drawn more
  1090. than once, but if several elements of @cite{M} are equal, they may
  1091. each make it into the result vector.)
  1092. X
  1093. One use of @kbd{k h} is to rearrange a list at random.  This happens
  1094. if the prefix argument is equal to the number of values in the list:
  1095. @kbd{[1, 1.5, 2, 2.5, 3] 5 k h} might produce the permuted list
  1096. @samp{[2.5, 1, 1.5, 3, 2]}.  As a convenient feature, if the argument
  1097. @var{n} is negative it is replaced by the size of the set represented
  1098. by @cite{M}.  Naturally, this is allowed only when @cite{M} specifies
  1099. a small discrete set of possibilities.
  1100. X
  1101. To do the equivalent of @kbd{k h} but with duplications allowed,
  1102. given @cite{M} on the stack and with @var{n} just entered as a numeric
  1103. prefix, use @kbd{v b} to build a vector of copies of @cite{M}, then use
  1104. @kbd{V M k r} to ``map'' the normal @kbd{k r} function over the
  1105. elements of this vector.  @xref{Matrix Functions}.
  1106. X
  1107. @menu
  1108. * Random Number Generator::     (Complete description of Calc's algorithm)
  1109. @end menu
  1110. X
  1111. @node Random Number Generator, , Random Numbers, Random Numbers
  1112. @subsection Random Number Generator
  1113. X
  1114. Calc's random number generator uses several methods to ensure that
  1115. the numbers it produces are highly random.  Knuth's @emph{Art of
  1116. Computer Programming}, Volume II, contains a thorough description
  1117. of the theory of random number generators and their measurement and
  1118. characterization.
  1119. X
  1120. If @code{RandSeed} has no stored value, Calc calls Emacs' built-in
  1121. @code{random} function to get a stream of random numbers, which it
  1122. then treats in various ways to avoid problems inherent in the simple
  1123. random number generators that many systems use to implement @code{random}.
  1124. X
  1125. When Calc's random number generator is first invoked, it ``seeds''
  1126. the low-level random sequence using the time of day, so that the
  1127. random number sequence will be different every time you use Calc.
  1128. X
  1129. Since Emacs Lisp doesn't specify the range of values that will be
  1130. returned by its @code{random} function, Calc exercises the function
  1131. several times to estimate the range.  When Calc subsequently uses
  1132. the @code{random} function, it takes only 10 bits of the result
  1133. near the most-significant end.  (It avoids at least the bottom
  1134. four bits, preferably more, and also tries to avoid the top two
  1135. bits.)  This strategy works well with the linear congruential
  1136. generators that are typically used to implement @code{random}.
  1137. X
  1138. If @code{RandSeed} contains an integer, Calc uses this integer to
  1139. seed an ``additive congruential'' method (Knuth's algorithm 3.2.2A,
  1140. computing @c{$X_{n-55} - X_{n-24}$}
  1141. @cite{X_n-55 - X_n-24}).  This method expands the seed
  1142. value into a large table which is maintained internally; the variable
  1143. @code{RandSeed} is changed from, e.g., 42 to the vector @cite{[42]}
  1144. to indicate that the seed has been absorbed into this table.  When
  1145. @code{RandSeed} contains a vector, @kbd{k r} and related commands
  1146. continue to use the same internal table as last time.  There is no
  1147. way to extract the complete state of the random number generator
  1148. so that you can restart it from any point; you can only restart it
  1149. from the same initial seed value.  A simple way to restart from the
  1150. same seed is to type @kbd{s r RandSeed} to get the seed vector,
  1151. @kbd{v u} to unpack it back into a number, then @kbd{s t RandSeed}
  1152. to reseed the generator with that number.
  1153. X
  1154. Calc uses a ``shuffling'' method as described in algorithm 3.2.2B
  1155. of Knuth.  It fills a table with 13 random 10-bit numbers.  Then,
  1156. to generate a new random number, it uses the previous number to
  1157. index into the table, picks the value it finds there as the new
  1158. random number, then replaces that table entry with a new value
  1159. obtained from a call to the base random number generator (either
  1160. the additive congruential generator or the @code{random} function
  1161. supplied by the system).  If there are any flaws in the base
  1162. generator, shuffling will tend to even them out.  But if the system
  1163. provides an excellent @code{random} function, shuffling will not
  1164. damage its randomness.
  1165. X
  1166. To create a random integer of a certain number of digits, Calc
  1167. builds the integer three decimal digits at a time.  For each group
  1168. of three digits, Calc calls its 10-bit random number generator
  1169. (which returns a value from 0 to 1023); if the random value is 1000
  1170. or more, Calc throws it out and tries again until it gets a suitable
  1171. value.
  1172. X
  1173. To create a random floating-point number with precision @var{p}, Calc
  1174. simply creates a random @var{p}-digit integer and multiplies by
  1175. @c{$10^{-p}$}
  1176. @cite{10^-p}.  The resulting random numbers should be very clean, but note
  1177. that relatively small numbers will have few significant random digits.
  1178. In other words, with a precision of 12, you will occasionally get
  1179. numbers on the order of @c{$10^{-9}$}
  1180. @cite{10^-9} or @c{$10^{-10}$}
  1181. @cite{10^-10}, but those numbers
  1182. will only have two or three random digits since they correspond to small
  1183. integers times @c{$10^{-12}$}
  1184. @cite{10^-12}.
  1185. X
  1186. To create a random integer in the interval @samp{[0 .. @var{m})}, Calc
  1187. counts the digits in @var{m}, creates a random integer with three
  1188. additional digits, then reduces modulo @var{m}.  Unless @var{m} is a
  1189. power of ten the resulting values will be very slightly biased toward
  1190. the lower numbers, but this bias will be less than 0.1%.  (For example,
  1191. if @var{m} is 42, Calc will reduce a random integer less than 100000
  1192. modulo 42 to get a result less than 42.  It is easy to show that the
  1193. numbers 40 and 41 will be only 2380/2381 as likely to result from this
  1194. modulo operation as numbers 39 and below.)  If @var{m} is a power of
  1195. ten, however, the numbers should be completely unbiased.
  1196. X
  1197. The Gaussian random numbers generated by @samp{random(0.0)} use the
  1198. ``polar'' method described in Knuth section 3.4.1C.  This method
  1199. generates a pair of Gaussian random numbers at a time, so only every
  1200. other call to @samp{random(0.0)} will require significant calculations.
  1201. X
  1202. @node Combinatorial Functions, Probability Distribution Functions, Random Numbers, Scientific Functions
  1203. @section Combinatorial Functions
  1204. X
  1205. @noindent
  1206. Commands relating to combinatorics and number theory begin with the
  1207. @kbd{k} key prefix.
  1208. X
  1209. @kindex k g
  1210. @pindex calc-gcd
  1211. @tindex gcd
  1212. The @kbd{k g} (@code{calc-gcd}) [@code{gcd}] command computes the
  1213. Greatest Common Divisor of two integers.  It also accepts fractions;
  1214. the GCD of two fractions is defined by taking the GCD of the
  1215. numerators, and the LCM of the denominators.  This definition is
  1216. consistent with the idea that @samp{a / gcd(a,x)} should yield an
  1217. integer for any @samp{a} and @samp{x}.  For other types of arguments,
  1218. the operation is left in symbolic form.@refill
  1219. X
  1220. @kindex k l
  1221. @pindex calc-lcm
  1222. @tindex lcm
  1223. The @kbd{k l} (@code{calc-lcm}) [@code{lcm}] command computes the
  1224. Least Common Multiple of two integers or fractions.  The product of
  1225. the LCM and GCD of two numbers is equal to the product of the
  1226. numbers.@refill
  1227. X
  1228. @kindex k E
  1229. @pindex calc-extended-gcd
  1230. @tindex egcd
  1231. The @kbd{k E} (@code{calc-extended-gcd}) [@code{egcd}] command computes
  1232. the GCD of two integers @cite{x} and @cite{y} and returns a vector
  1233. @cite{[g, a, b]} where @c{$g = \gcd(x,y) = a x + b y$}
  1234. @cite{g = gcd(x,y) = a x + b y}.
  1235. X
  1236. @kindex !
  1237. @pindex calc-factorial
  1238. @tindex fact
  1239. @tindex !
  1240. The @kbd{!} (@code{calc-factorial}) [@code{fact}] command computes the
  1241. factorial of the number at the top of the stack.  If the number is an
  1242. integer, the result is an exact integer.  If the number is an
  1243. integer-valued float, the result is a floating-point approximation.  If
  1244. the number is a non-integral real number, the generalized factorial is used,
  1245. as defined by the Euler Gamma function.  Please note that computation of
  1246. large factorials can be slow; using floating-point format will help
  1247. since fewer digits must be maintained.  The same is true of many of
  1248. the commands in this section.@refill
  1249. X
  1250. @kindex k d
  1251. @pindex calc-double-factorial
  1252. @tindex dfact
  1253. The @kbd{k d} (@code{calc-double-factorial}) [@code{dfact}] command
  1254. computes the ``double factorial'' of an integer.  For an even integer,
  1255. this is the product of even integers from 2 to @cite{N}.  For an odd
  1256. integer, this is the product of odd integers from 3 to @cite{N}.  If
  1257. the argument is an integer-valued float, the result is a floating-point
  1258. approximation.  This function is undefined for negative even integers.
  1259. The notation @cite{N!!} is also recognized for double factorials.@refill
  1260. X
  1261. @kindex k c
  1262. @pindex calc-choose
  1263. @tindex choose
  1264. The @kbd{k c} (@code{calc-choose}) [@code{choose}] command computes the
  1265. binomial coefficient @cite{N}-choose-@cite{M}, where @cite{M} is the number
  1266. on the top of the stack and @cite{N} is second-to-top.  If both arguments
  1267. are integers, the result is an exact integer.  Otherwise, the result is a
  1268. floating-point approximation.  The binomial coefficient is defined for all
  1269. real numbers by @c{$N! \over M! (N-M)!\,$}
  1270. @cite{N! / M! (N-M)!}.
  1271. X
  1272. @kindex H k c
  1273. @pindex calc-perm
  1274. @tindex perm
  1275. @ifinfo
  1276. The @kbd{H k c} (@code{calc-perm}) [@code{perm}] command computes the
  1277. number-of-permutations function @cite{N! / (N-M)!}.
  1278. @end ifinfo
  1279. @iftex
  1280. The @kbd{H k c} (@code{calc-perm}) [@code{perm}] command computes the
  1281. number-of-perm\-utations function @c{$N! \over (N-M)!\,$}
  1282. @cite{N! / (N-M)!}.
  1283. @end iftex
  1284. X
  1285. @kindex k b
  1286. @kindex H k b
  1287. @pindex calc-bernoulli-number
  1288. @tindex bern
  1289. The @kbd{k b} (@code{calc-bernoulli-number}) [@code{bern}] command
  1290. computes a given Bernoulli number.  The value at the top of the stack
  1291. is a nonnegative integer @cite{n} that specifies which Bernoulli number
  1292. is desired.  The @kbd{H k b} command computes a Bernoulli polynomial,
  1293. taking @cite{n} from the second-to-top position and @cite{x} from the
  1294. top of the stack.  If @cite{x} is a variable or formula the result is
  1295. a polynomial in @cite{x}; if @cite{x} is a number the result is a number.
  1296. X
  1297. @kindex k e
  1298. @kindex H k e
  1299. @pindex calc-euler-number
  1300. @tindex euler
  1301. The @kbd{k e} (@code{calc-euler-number}) [@code{euler}] command similarly
  1302. computes an Euler number, and @kbd{H k e} computes an Euler polynomial.
  1303. Bernoulli and Euler numbers occur in the Taylor expansions of several
  1304. functions.
  1305. X
  1306. @kindex k s
  1307. @kindex H k s
  1308. @pindex calc-stirling-number
  1309. @tindex stir1
  1310. @tindex stir2
  1311. The @kbd{k s} (@code{calc-stirling-number}) [@code{stir1}] command
  1312. computes a Stirling number of the first kind@c{ $n \brack m$}
  1313. @asis{}, given two integers
  1314. @cite{n} and @cite{m} on the stack.  The @kbd{H k s} [@code{stir2}]
  1315. command computes a Stirling number of the second kind@c{ $n \brace m$}
  1316. @asis{}.  These are
  1317. the number of @cite{m}-cycle permutations of @cite{n} objects, and
  1318. the number of ways to partition @cite{n} objects into @cite{m}
  1319. non-empty sets, respectively.
  1320. X
  1321. @kindex k p
  1322. @pindex calc-prime-test
  1323. @cindex Primes
  1324. The @kbd{k p} (@code{calc-prime-test}) command checks if the integer on
  1325. the top of the stack is prime.  For integers less than eight million, the
  1326. answer is always exact and reasonably fast.  For larger integers, a
  1327. probabilistic method is used (See Knuth vol. II, section 4.5.4, algorithm P).
  1328. The number is first checked against small prime factors (up to 13).  Then,
  1329. any number of iterations of the algorithm are performed.  Each step either
  1330. discovers that the number is non-prime, or substantially increases the
  1331. SHAR_EOF
  1332. true || echo 'restore of calc.texinfo failed'
  1333. fi
  1334. echo 'End of  part 42'
  1335. echo 'File calc.texinfo is continued in part 43'
  1336. echo 43 > _shar_seq_.tmp
  1337. exit 0
  1338. exit 0 # Just in case...
  1339. -- 
  1340. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1341. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1342. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1343. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1344.